package com.minio.service;

import com.google.gson.JsonObject;
import com.minio.config.ComfyUIImg2ImgWithOkHttp;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.awt.image.BufferedImage;

/**
 * ComfyUI 服务类
 * 提供高级的 ComfyUI 操作接口
 */
@Service
@Slf4j
public class ComfyUIService {
    
    @Autowired
    private ComfyUIImg2ImgWithOkHttp comfyUIImg2ImgWithOkHttp;
    
    /**
     * 执行图生图任务
     * @param imagePath 输入图片路径
     * @param promptJson 任务配置JSON
     * @return 任务ID
     */
    public String executeImg2ImgTask(String imagePath, String promptJson) {
//        try {
//            // 1. 上传图片
//            String uploadedImageName = comfyUIImg2ImgWithOkHttp.uploadImage(imagePath);
//            if (uploadedImageName == null) {
//                log.error("图片上传失败: {}", imagePath);
//                return null;
//            }
//            log.info("图片上传成功: {}", uploadedImageName);
//
//            // 2. 提交任务
//            String taskId = comfyUIImg2ImgWithOkHttp.submitImg2ImgTask(promptJson);
//            if (taskId == null) {
//                log.error("任务提交失败");
//                return null;
//            }
//            log.info("任务提交成功，ID: {}", taskId);
//
//            return taskId;
//        } catch (Exception e) {
//            log.error("执行图生图任务时发生错误", e);
//            return null;
//        }
        return "";
    }
    
    /**
     * 等待任务完成并获取结果
     * @param taskId 任务ID
     * @param maxWaitTime 最大等待时间（毫秒）
     * @return 任务结果
     */
    public JsonObject waitForTaskAndGetResult(String taskId, long maxWaitTime) {
        try {
            // 等待任务完成
            boolean success = comfyUIImg2ImgWithOkHttp.waitForTaskCompletion(taskId, 2000, maxWaitTime);
            if (!success) {
                log.error("任务执行失败或超时: {}", taskId);
                return null;
            }
            
            // 获取任务结果
            JsonObject result = comfyUIImg2ImgWithOkHttp.getTaskStatus(taskId);
            log.info("任务执行完成: {}", taskId);
            return result;
        } catch (Exception e) {
            log.error("等待任务完成时发生错误", e);
            return null;
        }
    }
    
    /**
     * 获取生成的图片
     * @param filename 图片文件名
     * @param subfolder 子文件夹
     * @param type 文件夹类型
     * @return 图片对象
     */
    public BufferedImage getGeneratedImage(String filename, String subfolder, String type) {
        try {
            return comfyUIImg2ImgWithOkHttp.getGeneratedImage(filename, subfolder, type);
        } catch (Exception e) {
            log.error("获取生成图片时发生错误", e);
            return null;
        }
    }
    
    /**
     * 检查 ComfyUI 服务状态
     * @return 是否连接成功
     */
    public boolean checkServiceStatus() {
        try {
            return comfyUIImg2ImgWithOkHttp.testConnection();
        } catch (Exception e) {
            log.error("检查服务状态时发生错误", e);
            return false;
        }
    }
}

